﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Jäckvik_Grupp4
{
    /// Gränssnitt för skidshop
    public partial class Skishop : Form
    {
        private LOGIC.LogicPrivateGuest privateGuest = new LOGIC.LogicPrivateGuest();
        private LOGIC.LogicCompanyGuest companyGuest = new LOGIC.LogicCompanyGuest();
        private LOGIC.LogicErrorhandling errorhand = new LOGIC.LogicErrorhandling();
        private LOGIC.LogicEquipment equipMent;
        private LOGIC.LogicRental renTal;
        private LOGIC.LogicSkiclass skiClass;
        private LOGIC.LogicInvoice invoice;

        private int tempRentalID = 0;
        public Skishop()
        {
            InitializeComponent();
            Searchresult searchresult = new Searchresult();
            equipMent = new LOGIC.LogicEquipment(LOGIC.LogicSession.TheSession);
            renTal = new LOGIC.LogicRental(LOGIC.LogicSession.TheSession);
            skiClass = new LOGIC.LogicSkiclass(LOGIC.LogicSession.TheSession);
            invoice = new LOGIC.LogicInvoice(LOGIC.LogicSession.TheSession);
            EquipmentPriceList(); // Visar prislista för utrustning
            ShowEquipLeftToReturn(); // Visar resterande (ej återlämnade) uthyrningar för dagen och tidigare datum
        }

        /// <summary>
        /// Metod som uppdaterar antalet lediga i skidskole listorna
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void comboBox_SkiPDay_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            listBox_SkiPFree.DataSource = skiClass.GetSkiClassPri(comboBox_SkiPDay.Text);
            listBox_SkiPShowFree.DataSource = skiClass.GetSkiPriFree(comboBox_SkiPDay.Text, skiClass.GetWeekNr());
        }

        //************************************************** Utrustning/Uthyrning **************************************************//
        #region

        /// <summary>
        /// Metod för att visa prislista för utrustning
        /// </summary>
        private void EquipmentPriceList()
        {
           equipMent = equipMent.GetEquipmentPrice("Alpint paket", "1"); textBox_SkiAlpPack1.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint paket", "2"); textBox_SkiAlpPack2.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint paket", "3"); textBox_SkiAlpPack3.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint paket", "4"); textBox_SkiAlpPack4.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint paket", "5"); textBox_SkiAlpPack5to7.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint skidor", "1"); textBox_SkiAlpSki1.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint skidor", "2"); textBox_SkiAlpSki2.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint skidor", "3"); textBox_SkiAlpSki3.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint skidor", "4"); textBox_SkiAlpSki4.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint skidor", "5"); textBox_SkiAlpSki5to7.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint pjäxor", "1"); textBox_SkiAlpFeet1.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint pjäxor", "2"); textBox_SkiAlpFeet2.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint pjäxor", "3"); textBox_SkiAlpFeet3.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint pjäxor", "4"); textBox_SkiAlpFeet4.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint pjäxor", "5"); textBox_SkiAlpFeet5to7.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint stavar", "1"); textBox_SkiSticks1.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint stavar", "2"); textBox_SkiSticks2.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint stavar", "3"); textBox_SkiSticks3.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint stavar", "4"); textBox_SkiSticks4.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Alpint stavar", "5"); textBox_SkiSticks5to7.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Längd paket", "1"); textBox_SkiCCPack1.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Längd paket", "2"); textBox_SkiCCPack2.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Längd paket", "3"); textBox_SkiCCPack3.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Längd paket", "4"); textBox_SkiCCPack4.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Längd paket", "5"); textBox_SkiCCPack5to7.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Längd skidor", "1"); textBox_SkiCCSki1.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Längd skidor", "2"); textBox_SkiCCSki2.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Längd skidor", "3"); textBox_SkiCCSki3.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Längd skidor", "4"); textBox_SkiCCSki4.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Längd skidor", "5"); textBox_SkiCCSki5to7.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Längd pjäxor", "1"); textBox_SkiCCFeet1.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Längd pjäxor", "2"); textBox_SkiCCFeet2.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Längd pjäxor", "3"); textBox_SkiCCFeet3.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Längd pjäxor", "4"); textBox_SkiCCFeet4.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Längd pjäxor", "5"); textBox_SkiCCFeet5to7.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Snowboard paket", "1"); textBox_SkiSnowPack1.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Snowboard paket", "2"); textBox_SkiSnowPack2.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Snowboard paket", "3"); textBox_SkiSnowPack3.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Snowboard paket", "4"); textBox_SkiSnowPack4.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Snowboard paket", "5"); textBox_SkiSnowPack5to7.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Snowboard snowboard", "1"); textBox_SkiSnowBoard1.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Snowboard snowboard", "2"); textBox_SkiSnowBoard2.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Snowboard snowboard", "3"); textBox_SkiSnowBoard3.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Snowboard snowboard", "4"); textBox_SkiSnowBoard4.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Snowboard snowboard", "5"); textBox_SkiSnowBoard5to7.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Snowboard skor", "1"); textBox_SkiSnowFeet1.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Snowboard skor", "2"); textBox_SkiSnowFeet2.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Snowboard skor", "3"); textBox_SkiSnowFeet3.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Snowboard skor", "4"); textBox_SkiSnowFeet4.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Snowboard skor", "5"); textBox_SkiSnowFeet5to7.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Hjälm", "1"); textBox_SkiHelmets1.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Hjälm", "2"); textBox_SkiHelmets2.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Hjälm", "3"); textBox_SkiHelmets3.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Hjälm", "4"); textBox_SkiHelmets4.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Hjälm", "5"); textBox_SkiHelmets5to7.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Skoter Lynx 50", "1"); textBox_SkiLynx1.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Skoter Lynx 50", "3"); textBox_SkiLynx3.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Skoter Lynx 50", "5"); textBox_SkiLynx5to7.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Skoter Yamaha Viking", "1"); textBox_SkiYama1.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Skoter Yamaha Viking", "3"); textBox_SkiYama3.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Skoter Yamaha Viking", "5"); textBox_SkiYama5to7.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Skoter Nilapulka", "1"); textBox_SkiNila1.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Skoter Nilapulka", "3"); textBox_SkiNila3.Text = equipMent.EquipmentPrice.ToString();
           equipMent = equipMent.GetEquipmentPrice("Skoter Nilapulka", "5"); textBox_SkiNila5to7.Text = equipMent.EquipmentPrice.ToString();
        }

        /// <summary>
        /// Metod för att lägga till utrustning i reserveringslistan
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiEqAdd_Click(object sender, EventArgs e)
        {
            string[] reserved = new string[listBox_SkiRentList.Items.Count];
            string tempId = textBox_SkiEqId.Text.Trim();
            string nrDays = comboBox_SkiEqNrDays.Text;
            string sticks = "Nej";
            int tempPrice = 0;
            int totPrice = int.Parse(textBox_SkiTotalSum.Text);

            if (equipMent.CheckEqInputById(tempId))
            {
                // Fyller reserved med innehållet i reserveringslistan
                for (int i = 0; i < listBox_SkiRentList.Items.Count; i++)
                {
                    reserved[i] = listBox_SkiRentList.Items[i].ToString();
                }
                if (equipMent.CheckIfEqExists(tempId, reserved))
                {
                    if (nrDays != "")
                    {
                        if (equipMent.CheckEqScooter(tempId, nrDays))
                        {
                            tempPrice = int.Parse(equipMent.AddEqToSum(tempId, nrDays)[0]);
                            if (checkBox_SkiEqSticks.Checked)
                            {
                                sticks = "Ja";
                                tempPrice += equipMent.AddSticksToSum(nrDays);
                            }
                            totPrice += tempPrice;

                            listBox_SkiRentList.Items.Add("(" + nrDays + ")" + "  " + equipMent.GetEqById(tempId)[0] + "  " + sticks + "  " + tempPrice);
                            textBox_SkiTotalSum.Text = totPrice.ToString();
                            textBox_SkiEqId.Clear();
                            comboBox_SkiEqNrDays.SelectedIndex = 0;
                            if (checkBox_SkiEqSticks.Checked)
                            {
                                checkBox_SkiEqSticks.Checked = false;
                            }
                        }
                        else MessageBox.Show("Skoter går ej att hyra (2) eller (4) dagar");
                    }
                    else MessageBox.Show("Antal dagar ej valt");
                }
                else MessageBox.Show("ID redan reserverat");
            }
            else MessageBox.Show("Felaktigt ID nummer");
        }

        /// <summary>
        /// Metod för att lägga till utrustningspaket i reserveringslistan
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiPackAdd_Click(object sender, EventArgs e)
        {
            string[] reserved = new string[listBox_SkiRentList.Items.Count];
            string equip = textBox_SkiPackEq.Text.Trim();
            string feet = textBox_SkiPackFeet.Text.Trim();
            string nrDays = comboBox_SkiPackNrDays.Text;
            string sticks = "Nej";
            int tempPriceEquip = 0;
            int tempPriceFeet = 0;
            int totPrice = int.Parse(textBox_SkiTotalSum.Text);

            if (equipMent.CheckEqInputById(equip) && equipMent.CheckEqInputById(feet))
            {
                if (equipMent.CheckEqPack(equip, feet))
                {
                    // Fyller reserved med innehållet i reserveringslistan
                    for (int i = 0; i < listBox_SkiRentList.Items.Count; i++)
                    {
                        reserved[i] = listBox_SkiRentList.Items[i].ToString();
                    }
                    if (equipMent.CheckIfEqExists(equip, reserved) && equipMent.CheckIfEqExists(feet, reserved))
                    {
                        if (nrDays != "")
                        {
                            tempPriceEquip = int.Parse(equipMent.AddPackToSum(equip, nrDays)[0]);
                            if (checkBox_SkiPackSticks.Checked)
                            {
                                sticks = "Ja";
                            }
                            totPrice += tempPriceEquip + tempPriceFeet;

                            listBox_SkiRentList.Items.Add("(" + nrDays + ")" + "  " + equipMent.GetEqById(equip)[0] + "  " + "Paket" + "  " + sticks + "  " + tempPriceEquip);
                            listBox_SkiRentList.Items.Add("(" + nrDays + ")" + "  " + equipMent.GetEqById(feet)[0] + "  " + "Paket" + "  " + sticks + "  " + tempPriceFeet);
                            textBox_SkiTotalSum.Text = totPrice.ToString();
                            textBox_SkiPackEq.Clear();
                            textBox_SkiPackFeet.Clear();
                            comboBox_SkiPackNrDays.SelectedIndex = 0;
                            if (checkBox_SkiPackSticks.Checked)
                            {
                                checkBox_SkiPackSticks.Checked = false;
                            }
                        }
                        else MessageBox.Show("Antal dagar ej valt");
                    }
                    else MessageBox.Show("ID redan reserverat");
                }
                else MessageBox.Show("ID nummer stämmer ej överens");
            }
            else MessageBox.Show("Felaktigt ID nummer");
        }

        /// <summary>
        /// Metod för att ta bort utrustning från reserveringslistan
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiRemove_Click(object sender, EventArgs e)
        {
            string rentDetails;
            string[] rentDetailsSplit;
            int tempPrice = 0;
            int totPrice = int.Parse(textBox_SkiTotalSum.Text);

            while (listBox_SkiRentList.SelectedIndices.Count > 0)
            {
                rentDetails = listBox_SkiRentList.SelectedItem.ToString();
                rentDetailsSplit = rentDetails.Split();

                tempPrice = int.Parse(rentDetailsSplit.LastOrDefault());
                totPrice -= tempPrice;

                listBox_SkiRentList.Items.RemoveAt(listBox_SkiRentList.SelectedIndices[0]);
            }

            textBox_SkiTotalSum.Text = totPrice.ToString();
        }

        /// <summary>
        /// Metod för att skapa ny uthyrning för utrustning
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void button_SkiConfirm_Click(object sender, EventArgs e)
        {
            try
            {
                if (tabControl_SkiOutGuest.SelectedIndex == 0) // Privat
                {
                    if (textBox_SkiOutPrFName.Text == "" || errorhand.OnlyLetters(textBox_SkiOutPrFName.Text.Trim()) == false)
                    { MessageBox.Show("Förnamn får enbart innehålla bokstäver"); }
                    else if (textBox_SkiOutPrLName.Text == "" || errorhand.OnlyLetters(textBox_SkiOutPrLName.Text.Trim()) == false)
                    { MessageBox.Show("Efternamn får enbart innehålla bokstäver"); }
                    else if (textBox_SkiOutPrZip.Text == "" || errorhand.OnlyNumbers(textBox_SkiOutPrZip.Text.Trim()) == false)
                    { MessageBox.Show("Postnummer får enbart innehålla siffror"); }
                    else if (textBox_SkiOutPrAddress.Text == "")
                    { MessageBox.Show("Du måste ange en gatuadress"); }
                    else if (errorhand.OnlyLetters(textBox_SkiOutPrCity.Text.Trim()) == false)
                    { MessageBox.Show("Ort får enbart innehålla bokstäver"); }
                    else
                    {
                        LOGIC.LogicRental.NewRentalPrivate(LOGIC.LogicSession.TheSession.ActiveUser, textBox_SkiOutPrFName.Text + " " + textBox_SkiOutPrLName.Text, textBox_SkiOutPrAddress.Text, textBox_SkiOutPrZip.Text, textBox_SkiOutPrCity.Text, int.Parse(textBox_SkiTotalSum.Text));
                        AddRentalRows(tempRentalID); // Skapar uthyrningsrader
                        ClearRentalDetails(); // Rensar fält i uthyrningsfönstret
                        ReceiptOut receipt = new ReceiptOut();
                        receipt.Show();
                    }
                }
                if (tabControl_SkiOutGuest.SelectedIndex == 1) // Företag
                {
                    if (textBox_SkiOutCoGuestNr.Text == "")
                    {
                        MessageBox.Show("Du måste ange en företagsgäst");
                    }
                    else
                    {


                        if (checkBox_SkiInvoice.Checked == true)
                        {
                            int guestNr = int.Parse(textBox_SkiOutCoGuestNr.Text);

                            if (renTal.InvoiceExistForRentalCheck(guestNr, DateTime.Today) != default(int))
                            {
                                int invoiceID = renTal.InvoiceExistForRentalCheck(guestNr, DateTime.Today.Date);


                                if (renTal.CheckRentalIDForInvoice(guestNr, DateTime.Today) == true)
                                {
                                    int tTempRentalID = renTal.GetRentalIDForInvoice(guestNr, DateTime.Today);
                                    AddRentalRows(tempRentalID);
                                    LOGIC.LogicRental.RentalRowUpdate(tTempRentalID, int.Parse(textBox_SkiTotalSum.Text));

                                }
                                else
                                {
                                    LOGIC.LogicRental.NewRentalCompany(int.Parse(textBox_SkiOutCoGuestNr.Text), LOGIC.LogicSession.TheSession.ActiveUser, textBox_SkiOutCoName.Text, textBox_SkiOutCoAddress.Text, textBox_SkiOutCoZip.Text, textBox_SkiOutCoCity.Text, int.Parse(textBox_SkiTotalSum.Text));
                                    int tTempRentalID = renTal.GetRentalIDForInvoice(guestNr, DateTime.Today);
                                    AddRentalRows(tempRentalID);
                                    LOGIC.LogicRental.LinkRentalRowWithInvoice(tTempRentalID, int.Parse(textBox_SkiTotalSum.Text));
                                }
                            }
                            else
                            {
                                LOGIC.LogicRental.NewRentalCompany(int.Parse(textBox_SkiOutCoGuestNr.Text), LOGIC.LogicSession.TheSession.ActiveUser, textBox_SkiOutCoName.Text, textBox_SkiOutCoAddress.Text, textBox_SkiOutCoZip.Text, textBox_SkiOutCoCity.Text, int.Parse(textBox_SkiTotalSum.Text));
                                int staffID = LOGIC.LogicSession.TheSession.ActiveUser;
                                AddRentalRows(tempRentalID);
                                LOGIC.LogicInvoice.CreateSumInvoice(renTal.GetRentalNumber(), guestNr, "c", int.Parse(textBox_SkiTotalSum.Text), "rent", staffID);
                            }
                            ReceiptOut receipt = new ReceiptOut();
                            receipt.Show();
                            ClearRentalDetails(); // Rensar fält i uthyrningsfönstret
                            textBox_SkiOutCoName.Enabled = true;
                        }
                        else
                        {
                            LOGIC.LogicRental.NewRentalCompany(int.Parse(textBox_SkiOutCoGuestNr.Text), LOGIC.LogicSession.TheSession.ActiveUser, textBox_SkiOutCoName.Text, textBox_SkiOutCoAddress.Text, textBox_SkiOutCoZip.Text, textBox_SkiOutCoCity.Text, int.Parse(textBox_SkiTotalSum.Text));
                            int tempId = renTal.GetRentalNumber();
                            AddRentalRows(tempId);
                            ReceiptOut rec = new ReceiptOut();
                            rec.Show();
                            ClearRentalDetails(); // Rensar fält i uthyrningsfönstret
                            textBox_SkiOutCoName.Enabled = true;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel " + ex);
            }
        }



        /// <summary>
        /// Metod för att skapa uthyrningsrader för senaste uthyrning
        /// </summary>
        private void AddRentalRows(int tempRentalID)
        {
            int rentalID;
            if (tempRentalID == default(int))
            {
                rentalID = renTal.GetRentalNumber();
            }
            else
            {
                rentalID = tempRentalID;
            }
            string rentDetails;
            string[] rentDetailsSplit;
            string eqId;
            string period;
            int price;
            for (int i = 0; i < listBox_SkiRentList.Items.Count; i++)
            {
                rentDetails = listBox_SkiRentList.Items[i].ToString();
                rentDetailsSplit = rentDetails.Split('(', ')', ' ');

                eqId = rentDetailsSplit[4];
                period = rentDetailsSplit[1];
                price = int.Parse(rentDetailsSplit.LastOrDefault());

                LOGIC.LogicRental.NewRentalRow(rentalID, eqId, period, price);
            }
        }

        /// <summary>
        /// Metod för att rensa fält i uthyrningsfönstret
        /// </summary>
        private void ClearRentalDetails()
        {
            textBox_SkiOutCoGuestNr.Clear();
            textBox_SkiOutCoName.Clear();
            textBox_SkiOutCoReference.Clear();
            textBox_SkiOutCoAddress.Clear();
            textBox_SkiOutCoZip.Clear();
            textBox_SkiOutCoCity.Clear();
            textBox_SkiOutPrFName.Clear();
            textBox_SkiOutPrLName.Clear();
            textBox_SkiOutPrAddress.Clear();
            textBox_SkiOutPrZip.Clear();
            textBox_SkiOutPrCity.Clear();
            textBox_SkiTotalSum.Text = "0";
            checkBox_SkiInvoice.Checked = false;
            listBox_SkiRentList.Items.Clear();
        }

        #endregion
        //************************************************** Återlämning ***********************************************************//
        #region

        /// <summary>
        /// Metod som tar in ett angivet uthyrningsnummer och visar utrusningen som ej är återlämnas på denna.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiInPrShow_Click_1(object sender, EventArgs e)
        {
            try
            {
                if (textBox_SkiInPrRentId.Text != "")
                {
                    listBox_SkiRentList2.Visible = true;
                    int tempId = int.Parse(textBox_SkiInPrRentId.Text);
                    listBox_SkiRentList2.DataSource = renTal.GetRentalRowsById(tempId);
                }
                else
                {
                    MessageBox.Show("Du måste ange ett uthyrningsid");
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Uthyrningsnr kan endast innehålla siffror");
            }
        }

        /// <summary>
        /// Metod som registrerar den markerade utrustningen som återlämnar samt skriver ut ett återlämningskvitto via RecieptIn.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiConfirm2_Click(object sender, EventArgs e)
        {
            int tempRecieptNr = 0;
            ListBox.SelectedObjectCollection selObjects;
            selObjects = listBox_SkiRentList2.SelectedItems;

            foreach (Object o in selObjects)
            {
                string returning = o.ToString();
                string[] returningSplit = returning.Split('\t');
                int tempNr = int.Parse(returningSplit[0]);
                string tempId = returningSplit[1];
                if (textBox_SkiInPrRentId.Text != "")
                {
                    if (tempNr == int.Parse(textBox_SkiInPrRentId.Text))
                    {
                        LOGIC.LogicRental.ReturnedEquip(tempNr, tempId);
                        EquipLeftToReturnRefresh();
                        ShowEquipLeftToReturn();
                        tempRecieptNr = tempNr;
                    }
                    else MessageBox.Show("Felaktigt uthyrningsID");
                }
                else MessageBox.Show("Ange uthyrningsID");
            }
            if (tempRecieptNr != 0)
            {
                ReceiptIn receiptReturn = new ReceiptIn(tempRecieptNr);
                receiptReturn.Show();
            }


        }

        /// <summary>
        /// Metod som kontrollerar att värde skrivit in i textrutan för att söka på kund vid återlämning samt visar sökresultat i listan.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiInPrSearch_Click_1(object sender, EventArgs e)
        {
            try
            {
                if (textBox_SkiInName.Text == "")
                {
                    MessageBox.Show("Du måste ange ett namn att söka på");
                }
                else
                {
                    string tempName = textBox_SkiInName.Text;
                    dataGridView_SkiInPrGuest.DataSource = renTal.GetRentalsByName(tempName);
                    dataGridView_SkiInPrGuest.Visible = true;
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Felaktigt värde i namn");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel " + ex);
            }
        }

        /// <summary>
        /// Metod som läser in den valda kunden vid dubbelklickning och fyller återlämningslistan med den resterande utrustningen som skall lämnas tillbaka.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView_SkiInPrGuest_DoubleClick_1(object sender, EventArgs e)
        {
            try
            {
                textBox_SkiInPrRentId.Text = dataGridView_SkiInPrGuest.CurrentRow.Cells[0].Value.ToString();
                string name = dataGridView_SkiInPrGuest.CurrentRow.Cells[1].Value.ToString();
                string[] nameSplit = name.Split(' ');
                textBox_SkiInName.Text = nameSplit[0];
                int tempId = int.Parse(textBox_SkiInPrRentId.Text);
                listBox_SkiRentList2.Visible = true;
                listBox_SkiRentList2.DataSource = renTal.GetRentalRowsById(tempId);
                dataGridView_SkiInPrGuest.Visible = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel " + ex);
            }
        }

        /// <summary>
        /// Metod som visar alla resterande uthyrningar som skall lämnas tillbaka under dagen eller som är försenade.
        /// </summary>
        private void ShowEquipLeftToReturn()
        {
            listBox_SkiRentLeft.DataSource = renTal.EquipIDLeftToReturn();
        }

        /// <summary>
        /// Metod som visar de utrustningsrader som hör ihop med den uthyrning man antingen sökt fram på nummer eller hämtat med hjälp av sökning på kund.
        /// </summary>
        private void ShowRentalRows()
        {
            try
            {
                if (textBox_SkiInPrRentId.Text != "")
                {
                    listBox_SkiRentList2.Visible = true;
                    int tempId = int.Parse(textBox_SkiInPrRentId.Text);
                    listBox_SkiRentList2.DataSource = renTal.GetRentalRowsById(tempId);
                }
                else
                {
                    MessageBox.Show("Du måste ange ett uthyrningsid");
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Uthyrningsnr kan endast innehålla siffror");
            }
        }

        /// <summary>
        /// Metod för att dubbelklicka på uthyrning i listan med resterande återlämningar och lägger över den valda uthyrningens rader samt information i listan för att återlämna.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void listBox_SkiRentLeft_DoubleClick(object sender, EventArgs e)
        {
            string rental = listBox_SkiRentLeft.SelectedItem.ToString();
            string[] rentalSplit = rental.Split('\t');
            int rentalID = int.Parse(rentalSplit[0]);
            textBox_SkiInPrRentId.Text = rentalID.ToString();
            textBox_SkiInName.Text = rentalSplit[1];
            ShowRentalRows();
        }

        /// <summary>
        /// Metod som uppdaterar listan med utrustningsrader då en eller flera bekräftats som återlämnade
        /// </summary>
        private void EquipLeftToReturnRefresh()
        {
            try
            {
                listBox_SkiRentList2.DataSource = renTal.GetRentalRowsById(int.Parse(textBox_SkiInPrRentId.Text));
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel " + ex);
            }
        }


        #endregion
        //************************************************** Skidlektioner *********************************************************//
        #region

        private void Skishop_Load(object sender, EventArgs e)
        {
            GetGroupSkiLessonShort();
            GetGroupSkiLessonLong();
            GetGroupSkiAttenders();
        }

        /// <summary>
        /// Metod för att hämta grupplektioner (Mån-Ons)
        /// </summary>
        private void GetGroupSkiLessonShort()
        {
            listBox_SkiGHalfFree.DataSource = skiClass.GetSkiClassShort();
        }

        /// <summary>
        /// Metod för att hämta grupplektioner (Mån-Fre)
        /// </summary>
        private void GetGroupSkiLessonLong()
        {
            listBox_SkiGWholeFree.DataSource = skiClass.GetSkiClassLong();
        }

        /// <summary>
        /// Metod för att hämta antal lediga grupplektioner
        /// </summary>
        private void GetGroupSkiAttenders()
        {
            listBox_SkiGShowFree.DataSource = skiClass.GetSkiClassAttenders(skiClass.GetWeekNr());
        }

        /// <summary>
        /// Timer för att uppdatera lediga grupplektioner
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer_SkiGroupUpdate_Tick(object sender, EventArgs e)
        {
            GetGroupSkiAttenders();
        }

        /// <summary>
        /// Event för att sätta igång/stänga av timer för att uppdatera lediga grupplektioner
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tabControl_Ski_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (tabControl_Ski.SelectedIndex == 1)
            {
                timer_SkiGroupUpdate.Enabled = true;
                textBox_SkiGWeek.Text = skiClass.GetWeekNr().ToString();
                textBox_SkiPWeek.Text = skiClass.GetWeekNr().ToString();
            }
            else
            {
                timer_SkiGroupUpdate.Enabled = false;
            }
        }

        /// <summary>
        /// Metod för att lägga till en privatgäst i reserveringslistan (grupp)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiGPrAdd_Click(object sender, EventArgs e)
        {
            string[] reserved = new string[listBox_SkiLesTrainees.Items.Count];
            string fName = textBox_SkiGPrFName.Text.Trim();
            string lName = textBox_SkiGPrLName.Text.Trim();
            string group = comboBox_SkiGPrGroup.Text;
            string period = comboBox_SkiGPrPeriod.Text;

            if (fName != "" && lName != "")
            {
                if (errorhand.OnlyLetters(textBox_SkiGPrFName.Text.Trim()) == false)
                { MessageBox.Show("Förnamn får enbart innehålla bokstäver"); }
                else if (errorhand.OnlyLetters(textBox_SkiGPrLName.Text.Trim()) == false)
                { MessageBox.Show("Efternamn får enbart innehålla bokstäver"); }
                else if (skiClass.CheckGroup(group))
                {
                    if (skiClass.CheckPeriod(period))
                    {
                        // Fyller reserved med innehållet i reserveringslistan
                        for (int i = 0; i < listBox_SkiLesTrainees.Items.Count; i++)
                        {
                            reserved[i] = listBox_SkiLesTrainees.Items[i].ToString();
                        }
                        if (skiClass.CheckIfGuestExists(skiClass.GetSkiLesId(group, period)[0], fName, lName, reserved))
                        {
                            if (skiClass.CheckAvailableGroup(int.Parse(skiClass.GetSkiLesId(group, period)[0]), skiClass.GetWeekNr(), reserved))
                            {
                                int id = int.Parse(skiClass.GetSkiLesId(group, period)[0]);
                                int tempPrice = int.Parse(skiClass.GetSkiLesPrice(group, period)[0]);

                                int totPrice = int.Parse(textBox_SkiLesTotalSum.Text);
                                listBox_SkiLesTrainees.Items.Add("Grupp ID: " + id + "   " + fName + " " + lName + "   " + "Pris: " + tempPrice);
                                totPrice += tempPrice;
                                textBox_SkiLesTotalSum.Text = totPrice.ToString();
                                textBox_SkiGPrFName.Clear();
                                textBox_SkiGPrLName.Clear();
                                comboBox_SkiGPrGroup.SelectedIndex = 0;
                                comboBox_SkiGPrPeriod.SelectedIndex = 0;
                            }
                            else MessageBox.Show("Grupplektion fullbokad!"); 
                        }
                        else MessageBox.Show("Samma person kan inte bokas för samma lektion"); 
                    }
                    else MessageBox.Show("Period ej vald");
                }
                else MessageBox.Show("Grupp ej vald");
            }
            else MessageBox.Show("Ange för- och efternamn för deltagare");
        }

        /// <summary>
        /// Metod för att lägga till en företagsgäst i reserveringslistan (grupp)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiGCoAdd_Click(object sender, EventArgs e)
        {
            string[] reserved = new string[listBox_SkiLesTrainees.Items.Count];
            string guestNr = textBox_SkiGCoGuestNr.Text;
            string fName = textBox_SkiGCoFName.Text.Trim();
            string lName = textBox_SkiGCoLName.Text.Trim();
            string group = comboBox_SkiGCoGroup.Text;
            string period = comboBox_SkiGCoPeriod.Text;

            if (guestNr != "")
            {
                if (fName != "" && lName != "")
                {
                    if (errorhand.OnlyLetters(textBox_SkiGCoFName.Text.Trim()) == false)
                    { MessageBox.Show("Förnamn får enbart innehålla bokstäver"); }
                    else if (errorhand.OnlyLetters(textBox_SkiGCoLName.Text.Trim()) == false)
                    { MessageBox.Show("Efternamn får enbart innehålla bokstäver"); }
                    else if (skiClass.CheckGroup(group))
                    {
                        if (skiClass.CheckPeriod(period))
                        {
                            // Fyller reserved med innehållet i reserveringslistan
                            for (int i = 0; i < listBox_SkiLesTrainees.Items.Count; i++)
                            {
                                reserved[i] = listBox_SkiLesTrainees.Items[i].ToString();
                            }
                            if (skiClass.CheckIfGuestExists(skiClass.GetSkiLesId(group, period)[0], fName, lName, reserved))
                            {
                                if (skiClass.CheckAvailableGroup(int.Parse(skiClass.GetSkiLesId(group, period)[0]), skiClass.GetWeekNr(), reserved))
                                {
                                    int id = int.Parse(skiClass.GetSkiLesId(group, period)[0]);
                                    int tempPrice = int.Parse(skiClass.GetSkiLesPrice(group, period)[0]);

                                    int totPrice = int.Parse(textBox_SkiLesTotalSum.Text);
                                    listBox_SkiLesTrainees.Items.Add("Grupp ID: " + id + "   " + fName + " " + lName + " " + guestNr + "   " + "Pris: " + tempPrice);
                                    totPrice += tempPrice;
                                    textBox_SkiLesTotalSum.Text = totPrice.ToString();
                                    textBox_SkiGCoFName.Clear();
                                    textBox_SkiGCoLName.Clear();
                                    comboBox_SkiGCoGroup.SelectedIndex = 0;
                                    comboBox_SkiGCoPeriod.SelectedIndex = 0;
                                }
                                else MessageBox.Show("Grupplektion fullbokad!"); 
                            }
                            else MessageBox.Show("Samma person kan inte bokas för samma lektion"); 
                        }
                        else MessageBox.Show("Period ej vald");
                    }
                    else MessageBox.Show("Grupp ej vald");
                }
                else MessageBox.Show("Ange för- och efternamn för deltagare");
            }
            else MessageBox.Show("Ange gästnummer för företag");
        }

        /// <summary>
        /// Metod för att lägga till en privatgäst i reserveringslistan (privat) 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiPPrAdd_Click(object sender, EventArgs e)
        {
            string[] reserved = new string[listBox_SkiLesTrainees.Items.Count];
            string fName = textBox_SkiPPrFName.Text.Trim();
            string lName = textBox_SkiPPrLName.Text.Trim();
            string id = textBox_SkiPPrID.Text.Trim();

            if (fName != "" && lName != "")
            {
                if (errorhand.OnlyLetters(textBox_SkiPPrFName.Text.Trim()) == false)
                { MessageBox.Show("Förnamn får enbart innehålla bokstäver"); }
                else if (errorhand.OnlyLetters(textBox_SkiPPrLName.Text.Trim()) == false)
                { MessageBox.Show("Efternamn får enbart innehålla bokstäver"); }
                else if (skiClass.CheckId(id))
                {
                    // Fyller reserved med innehållet i reserveringslistan
                    for (int i = 0; i < listBox_SkiLesTrainees.Items.Count; i++)
                    {
                        reserved[i] = listBox_SkiLesTrainees.Items[i].ToString();
                    }
                    if (skiClass.CheckIfGuestExists(id, fName, lName, reserved))
                    {
                        if (skiClass.CheckIfLesExists(id, reserved))
                        {
                            if (skiClass.CheckAvailablePri(int.Parse(id), skiClass.GetWeekNr()))
                            {
                                int tempPrice = int.Parse(skiClass.GetSkiLesPrice(id)[0]);
                                int totPrice = int.Parse(textBox_SkiLesTotalSum.Text);
                                listBox_SkiLesTrainees.Items.Add("Privat ID: " + id + "   " + fName + " " + lName + "   " + "Pris: " + tempPrice);
                                totPrice += tempPrice;
                                textBox_SkiLesTotalSum.Text = totPrice.ToString();
                                textBox_SkiPPrFName.Clear();
                                textBox_SkiPPrLName.Clear();
                                textBox_SkiPPrID.Clear();
                            }
                            else MessageBox.Show("Privatlektion redan bokad!");
                        }
                        else MessageBox.Show("Endast två personer kan bokas på samma ID nummer");
                    }
                    else MessageBox.Show("Samma person kan inte bokas för samma lektion"); 
                }
                else MessageBox.Show("Felaktigt ID nummer");
            }
            else MessageBox.Show("Ange för- och efternamn för deltagare");
        }

        /// <summary>
        /// Metod för att lägga till en företagsgäst i reserveringslistan (privat) 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiPCoAdd_Click(object sender, EventArgs e)
        {
            string[] reserved = new string[listBox_SkiLesTrainees.Items.Count];
            string guestNr = textBox_SkiPCoGuestNr.Text;
            string fName = textBox_SkiPCoFName.Text.Trim();
            string lName = textBox_SkiPCoLName.Text.Trim();
            string id = textBox_SkiPCoID.Text.Trim();

            if (guestNr != "")
            {
                if (fName != "" && lName != "")
                {
                    if (errorhand.OnlyLetters(textBox_SkiPCoFName.Text.Trim()) == false)
                    { MessageBox.Show("Förnamn får enbart innehålla bokstäver"); }
                    else if (errorhand.OnlyLetters(textBox_SkiPCoLName.Text.Trim()) == false)
                    { MessageBox.Show("Efternamn får enbart innehålla bokstäver"); }
                    else if (skiClass.CheckId(id))
                    {
                        // Fyller reserved med innehållet i reserveringslistan
                        for (int i = 0; i < listBox_SkiLesTrainees.Items.Count; i++)
                        {
                            reserved[i] = listBox_SkiLesTrainees.Items[i].ToString();
                        }
                        if (skiClass.CheckIfGuestExists(id, fName, lName, reserved))
                        {
                            if (skiClass.CheckIfLesExists(id, reserved))
                            {
                                if (skiClass.CheckAvailablePri(int.Parse(id), skiClass.GetWeekNr()))
                                {
                                    int tempPrice = int.Parse(skiClass.GetSkiLesPrice(id)[0]);
                                    int totPrice = int.Parse(textBox_SkiLesTotalSum.Text);
                                    listBox_SkiLesTrainees.Items.Add("Privat ID: " + id + "   " + fName + " " + lName + " " + guestNr + "   " + "Pris: " + tempPrice);
                                    totPrice += tempPrice;
                                    textBox_SkiLesTotalSum.Text = totPrice.ToString();
                                    textBox_SkiPCoFName.Clear();
                                    textBox_SkiPCoLName.Clear();
                                    textBox_SkiPCoID.Clear();
                                }
                                else MessageBox.Show("Privatlektion redan bokad!");
                             }
                             else MessageBox.Show("Endast två personer kan bokas på samma ID nummer");
                         }
                         else MessageBox.Show("Samma person kan inte bokas för samma lektion");
                    }
                    else MessageBox.Show("Felaktigt ID nummer");
                }
                else MessageBox.Show("Ange för- och efternamn för deltagare");
            }
            else MessageBox.Show("Ange gästnummer för företag");
        }

        /// <summary>
        /// Metod för att ta bort lektion från reserveringslistan
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiLesRemove_Click_1(object sender, EventArgs e)
        {
            string lessonDetails;
            string[] lessonDetailsSplit;
            int tempPrice = 0;
            int totPrice = int.Parse(textBox_SkiLesTotalSum.Text);

            while (listBox_SkiLesTrainees.SelectedIndices.Count > 0)
            {
                lessonDetails = listBox_SkiLesTrainees.SelectedItem.ToString();
                lessonDetailsSplit = lessonDetails.Split();

                tempPrice = int.Parse(lessonDetailsSplit.LastOrDefault());
                totPrice -= tempPrice;

                listBox_SkiLesTrainees.Items.RemoveAt(listBox_SkiLesTrainees.SelectedIndices[0]);
            }

            textBox_SkiLesTotalSum.Text = totPrice.ToString();
        }

        /// <summary>
        /// Metod för att skapa ny bokning för skidskola
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiLesConfirm_Click(object sender, EventArgs e)
        {
            string main = listBox_SkiLesTrainees.Items[0].ToString();
            string[] mainDetails = main.Split(':', ' ');

            if (skiClass.CheckPrivateOrCompany(mainDetails))
            {
                LOGIC.LogicSkiclass.NewSkiBookCo(int.Parse(mainDetails[8]), LOGIC.LogicSession.TheSession.ActiveUser, (mainDetails[6] + " " + mainDetails[7]), int.Parse(textBox_SkiLesTotalSum.Text));
                AddLessonRows(); // Lägger till bokningsrader
                if (checkBox_SkiLesInvoice.Checked)
                {
                    checkBox_SkiLesInvoice.Checked = false;
                }
                EmptyAttendentsDetails(); // Rensar fält i lektionsfönstret
            }
            else
            {
                LOGIC.LogicSkiclass.NewSkiBookPri(LOGIC.LogicSession.TheSession.ActiveUser, (mainDetails[6] + " " + mainDetails[7]), int.Parse(textBox_SkiLesTotalSum.Text));
                AddLessonRows(); // Lägger till bokningsrader
                if (checkBox_SkiLesInvoice.Checked)
                {
                    checkBox_SkiLesInvoice.Checked = false;
                }
                EmptyAttendentsDetails(); // Rensar fält i lektionsfönstret
            }

            listBox_SkiPShowFree.DataSource = skiClass.GetSkiPriFree(comboBox_SkiPDay.Text, skiClass.GetWeekNr());
        }

        /// <summary>
        /// Metod för att skapa bokningsrader för senaste skidbokning
        /// </summary>
        private void AddLessonRows()
        {
            string lessonDetails;
            string[] lessonDetailsSplit;
            string name;
            int lessonId;
            int price;
            for (int i = 0; i < listBox_SkiLesTrainees.Items.Count; i++)
            {
                lessonDetails = listBox_SkiLesTrainees.Items[i].ToString();
                lessonDetailsSplit = lessonDetails.Split(':', ' ');

                name = (lessonDetailsSplit[6] + " " + lessonDetailsSplit[7]);
                lessonId = int.Parse(lessonDetailsSplit[3]);
                price = int.Parse(lessonDetailsSplit.LastOrDefault());

                if (skiClass.CheckPrivateOrGroup(lessonDetailsSplit))
                {
                    LOGIC.LogicSkiclass.NewSkiGroupRow(skiClass.GetSkiBookNr(), lessonId, name, price, skiClass.GetWeekNr().ToString());
                }
                else
                {
                    LOGIC.LogicSkiclass.NewSkiPrivateRow(skiClass.GetSkiBookNr(), lessonId, name, price, skiClass.GetWeekNr().ToString());
                }
            }
        }

        /// <summary>
        /// Metod för att rensa fält i lektionsfönstret
        /// </summary>
        private void EmptyAttendentsDetails()
        {
            textBox_SkiGPrFName.Clear();
            textBox_SkiGPrLName.Clear();
            comboBox_SkiGPrGroup.SelectedIndex = 0;
            comboBox_SkiGPrPeriod.SelectedIndex = 0;
            textBox_SkiGCoGuestNr.Clear();
            textBox_SkiGCoFName.Clear();
            textBox_SkiGCoLName.Clear();
            comboBox_SkiGCoGroup.SelectedIndex = 0;
            comboBox_SkiGCoPeriod.SelectedIndex = 0;
            textBox_SkiPPrFName.Clear();
            textBox_SkiPPrLName.Clear();
            textBox_SkiPPrID.Clear();
            textBox_SkiPCoFName.Clear();
            textBox_SkiPCoLName.Clear();
            textBox_SkiPCoID.Clear();
            textBox_SkiLesTotalSum.Text = "0";
            checkBox_SkiLesInvoice.Checked = false;
            listBox_SkiLesTrainees.Items.Clear();
        }

        /// <summary>
        /// Metod som öppnar formuläret deltagarlista för utskrift av dessa
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiLesPrint_Click(object sender, EventArgs e)
        {
            TraineeList pList = new TraineeList();

            pList.Show();
        }

        #endregion
        //************************************************** Gästhantering *********************************************************//
        #region

        /// <summary>
        /// Metod som visar/döljer checkboxen för fakturering beroende på vilken slags kund som väljs vid uthyrning
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tabControl_SkiOutGuest_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (tabControl_SkiOutGuest.SelectedIndex == 0)
            {
                checkBox_SkiInvoice.Visible = false;
            }
            else if (tabControl_SkiOutGuest.SelectedIndex == 1)
                checkBox_SkiInvoice.Visible = true;
        }

        /// <summary>
        ///  Metod som visar/döljer checkboxen för fakturering beroende på vilken slags kund som väljs vid grupplektion
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tabControl_SkiGGuest_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (tabControl_SkiGGuest.SelectedIndex == 0)
            {
                checkBox_SkiLesInvoice.Visible = false;
            }
            else
                checkBox_SkiLesInvoice.Visible = true;
        }

        /// <summary>
        /// Metod som visar/döljer checkboxen för fakturering beroende på vilken slags kund som väljs vid privatlektion
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tabControl_SkiPGuest_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (tabControl_SkiPGuest.SelectedIndex == 0)
            {
                checkBox_SkiLesInvoice.Visible = false;
            }
            else
                checkBox_SkiLesInvoice.Visible = true;
        }

        /// <summary>
        /// Metod som söker reda på privatgäster utifrån för-och/eller efternamn vid uthyrning
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiOutPrSearch_Click_1(object sender, EventArgs e)
        {
            if (textBox_SkiOutPrLName.Text == "" && textBox_SkiOutPrFName.Text == "")
            {
                MessageBox.Show("Du måste ange antingen för- eller efternamn");
            }
            else if (textBox_SkiOutPrLName.Text != "" && textBox_SkiOutPrFName.Text != "") //Kontrollerar om det finns värden i både förnamn och efternamn.
            {
                string tempLName = this.textBox_SkiOutPrLName.Text;
                string tempFName = this.textBox_SkiOutPrFName.Text;
                dataGridView_SkiPGuestOut.DataSource = privateGuest.GetGuestByName(tempLName, tempFName);
                dataGridView_SkiPGuestOut.Visible = true;
            }

            else if (textBox_SkiOutPrFName.Text != "") // Kontrollerar om det finns ett värde i förnamn 
            {
                string tempFName = (textBox_SkiOutPrFName.Text);
                dataGridView_SkiPGuestOut.DataSource = privateGuest.GetGuestByFName(tempFName);
                dataGridView_SkiPGuestOut.Visible = true;
            }

            else if (textBox_SkiOutPrLName.Text != "") // Kontrollerar om det finns ett värde i efternamn
            {
                string tempLName = (textBox_SkiOutPrLName.Text);
                dataGridView_SkiPGuestOut.DataSource = privateGuest.GetGuestByLName(tempLName);
                dataGridView_SkiPGuestOut.Visible = true;
            }
        }

        /// <summary>
        /// Metod som söker redan på företagsgäster på företagsnamnet vid uthyrning
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiOutCoSearch_Click(object sender, EventArgs e)
        {
            try
            {
                if (textBox_SkiOutCoName.Text == "")
                {
                    MessageBox.Show("Du måste ange ett företagsnamn"); 
                }
                if (textBox_SkiOutCoName.Text != "")//Kontrollerar så det finns värde i rutan företagsnamn.
                {
                    string tempCoName = this.textBox_SkiOutCoName.Text;
                    dataGridView_SkiCoGuestOut.DataSource = companyGuest.GetCoGuestName(tempCoName);
                    dataGridView_SkiCoGuestOut.Visible = true;
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Ogiltigt värde i företagsnamn");
            }
        }

        /// <summary>
        /// Metod som söker redan på företagsgäster på företagsnamnet vid bokning av grupplektioner
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiGCoSearch_Click(object sender, EventArgs e)
        {
            try
            {
                if (textBox_SkiGCoName.Text == "")
                { MessageBox.Show("Du måste ange ett namn att söka på"); }
                else if (errorhand.OnlyLetters(textBox_SkiGCoName.Text.Trim()) == false)
                { MessageBox.Show(" Företagsnamn kan enbart innehålla bokstäver"); }
                else
                {
                    string tempName = textBox_SkiGCoName.Text.Trim();
                    dataGridView_SchoolCoGroup.DataSource = companyGuest.GetCoGuestName(tempName);
                    dataGridView_SchoolCoGroup.Visible = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel " + ex);
            }
        }

        /// <summary>
        /// Metod som söker redan på företagsgäster på företagsnamnet vid bokning av privatlektioner
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiPCoSearch_Click(object sender, EventArgs e)
        {
            try
            {
                if (textBox_SkiPCoName.Text == "")
                { MessageBox.Show("Du måste ange ett namn att söka på"); }
                else if (errorhand.OnlyLetters(textBox_SkiPCoName.Text.Trim()) == false)
                { MessageBox.Show(" Företagsnamn kan enbart innehålla bokstäver"); }
                else
                {
                    string tempName = textBox_SkiPCoName.Text.Trim();
                    dataGridView_SchoolCoPriv.DataSource = companyGuest.GetCoGuestName(tempName);
                    dataGridView_SchoolCoPriv.Visible = true;
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Felaktigt värde i namn");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel " + ex);
            }
        }

        /// <summary>
        /// Metod som öppnar textfälten för att kunna skriva in en ny privatkund vid uthyrning
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiOutPrNew_Click(object sender, EventArgs e)
        {
            textBox_SkiOutPrAddress.Enabled = true;
            textBox_SkiOutPrCity.Enabled = true;
            textBox_SkiOutPrZip.Enabled = true;
        }

        /// <summary>
        /// Metod som hämtar in vald privat kundsuppgifter i textboxar vid dubbelklickning
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView_SkiPGuestOut_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                textBox_SkiOutPrFName.Text = dataGridView_SkiPGuestOut.CurrentRow.Cells[0].Value.ToString();
                textBox_SkiOutPrLName.Text = dataGridView_SkiPGuestOut.CurrentRow.Cells[1].Value.ToString();
                textBox_SkiOutPrAddress.Text = dataGridView_SkiPGuestOut.CurrentRow.Cells[2].Value.ToString();
                textBox_SkiOutPrZip.Text = dataGridView_SkiPGuestOut.CurrentRow.Cells[3].Value.ToString();
                textBox_SkiOutPrCity.Text = dataGridView_SkiPGuestOut.CurrentRow.Cells[4].Value.ToString();
                dataGridView_SkiPGuestOut.Visible = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel " + ex);
            }
        }

        /// <summary>
        /// Metod som hämtar in vald företagsuppgifter till textboxar vid dubbelklickning i uthyrningen
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView_SkiCoGuestOut_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                textBox_SkiOutCoGuestNr.Text = dataGridView_SkiCoGuestOut.CurrentRow.Cells[0].Value.ToString();
                textBox_SkiOutCoName.Text = dataGridView_SkiCoGuestOut.CurrentRow.Cells[1].Value.ToString();
                textBox_SkiOutCoReference.Text = dataGridView_SkiCoGuestOut.CurrentRow.Cells[2].Value.ToString();
                textBox_SkiOutCoAddress.Text = dataGridView_SkiCoGuestOut.CurrentRow.Cells[3].Value.ToString();
                textBox_SkiOutCoZip.Text = dataGridView_SkiCoGuestOut.CurrentRow.Cells[4].Value.ToString();
                textBox_SkiOutCoCity.Text = dataGridView_SkiCoGuestOut.CurrentRow.Cells[5].Value.ToString();
                textBox_SkiOutCoName.Enabled = false;
                dataGridView_SkiCoGuestOut.Visible = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel " + ex);
            }
        }

        /// <summary>
        /// Metod som hämtar in vald företagsuppgifter till textboxar vid dubbelklickning i grupplektionsbokning
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView_SchoolCoGroup_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                textBox_SkiGCoName.Text = dataGridView_SchoolCoGroup.CurrentRow.Cells[0].Value.ToString();
                textBox_SkiGCoGuestNr.Text = dataGridView_SchoolCoGroup.CurrentRow.Cells[7].Value.ToString();
                dataGridView_SchoolCoGroup.Visible = false;
            }
            catch (Exception ex)
            { MessageBox.Show("Något gick fel " + ex); }
        }

        /// <summary>
        ///  Metod som hämtar in vald företagsuppgifter till textboxar vid dubbelklickning i privatlektionsbokning
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView_SchoolCoPriv_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                textBox_SkiPCoName.Text = dataGridView_SchoolCoPriv.CurrentRow.Cells[0].Value.ToString();
                textBox_SkiPCoGuestNr.Text = dataGridView_SchoolCoPriv.CurrentRow.Cells[7].Value.ToString();
                dataGridView_SchoolCoPriv.Visible = false;
            }
            catch (Exception ex)
            { MessageBox.Show("Något gick fel " + ex); }
        }

        /// <summary>
        /// Metod som rensar fälten då man klickar på ångra vid företagskunder i uthyrningen
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiOutCoRegret_Click(object sender, EventArgs e)
        {
            textBox_SkiOutCoGuestNr.Clear();
            textBox_SkiOutCoName.Clear();
            textBox_SkiOutCoReference.Clear();
            textBox_SkiOutCoAddress.Clear();
            textBox_SkiOutCoZip.Clear();
            textBox_SkiOutCoCity.Clear();
            textBox_SkiOutCoReference.Enabled = false;
            textBox_SkiOutCoAddress.Enabled = false;
            textBox_SkiOutCoZip.Enabled = false;
            textBox_SkiOutCoCity.Enabled = false;
            textBox_SkiOutCoName.Enabled = true;
            dataGridView_SkiCoGuestOut.Visible = false;
        }

        /// <summary>
        /// Metod som rensar fälten då man klickar på ångra vid privatkunder i uthyrningen
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_SkiOutPrRegret_Click(object sender, EventArgs e)
        {
            textBox_SkiOutPrFName.Clear();
            textBox_SkiOutPrLName.Clear();
            textBox_SkiOutPrAddress.Clear();
            textBox_SkiOutPrZip.Clear();
            textBox_SkiOutPrCity.Clear();
            textBox_SkiOutPrAddress.Enabled = false;
            textBox_SkiOutPrZip.Enabled = false;
            textBox_SkiOutPrCity.Enabled = false;
            dataGridView_SkiPGuestOut.Visible = false;
        }

        #endregion
        //************************************************** Huvudmeny *************************************************************//
        #region
        /// <summary>
        /// Metod som avslutar systemet helt
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void avslutaToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            DialogResult result;
            MessageBoxButtons buttons = MessageBoxButtons.YesNo;
            result = MessageBox.Show("Är du säker på att du vill avsluta?", "Viktigt", buttons);
            if (result == DialogResult.Yes)
            { Application.Exit(); }
        }

 

        /// <summary>
        /// Metod för att logga ut ur systemet
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void avslutaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult result;
            MessageBoxButtons buttons = MessageBoxButtons.YesNo;
            result = MessageBox.Show("Är du säker på att du vill logga ut?", "Viktigt", buttons);
            if (result == DialogResult.Yes)
            {
                this.Close();
                if (Application.OpenForms.OfType<CLRS_Inloggning>().Count() == 0)
                {
                    CLRS_Inloggning loadInlog = new CLRS_Inloggning();
                    loadInlog.ShowDialog();
                }
            }
        }
        #endregion
    }
}
